home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byte0887.arc / LANE.ARC / PARSE80.ARI < prev    next >
Text File  |  1987-05-05  |  3KB  |  85 lines

  1. % Subject: PARSE80.ARI  - from A. Lane: "Simulating an 8085 with Prolog"
  2.  
  3. %    Use DCG to parse a command (request) from the simple monitor.
  4. %
  5. %    Intended to be used with TOKENS.ARI (5/10/86)
  6. %
  7. %    Basically want to implement following commands:
  8. %                                                      Examples:
  9. %
  10. %    change --+-- memory-address ---- value           (change 002c 3f)
  11. %             +-- register-contents ---- value        (change d 2c)
  12. %             +-- register-pair-pointer ---- value    (change pc 0f3)
  13. %    help  (a screen of help)                         (help)
  14. %    quit  (back to DOS)                              (quit)
  15. %    reset (all parameters to some intial state)      (reset)
  16. %    show --+-- register-contents                     (show b)
  17. %           +-- contents of reg-pair-pointer          (show bc)
  18. %           +-- <memory, no range specified>          (show)
  19. %           +-- starting-memory-address               (show 0020)
  20. %           +-- starting-address --- ending-address   (show 0020 002f)
  21. %    step                                             (step)
  22. %    trace                                            (trace)
  23. %
  24.  
  25. parse_tokens(change(Adr,Val)) --> verb(change), address(Adr), byte(Val).
  26.  
  27. parse_tokens(change(Reg,Val)) --> verb(change), register_name(Reg), byte(Val).
  28.  
  29. parse_tokens(change(RegPair,Val)) --> verb(change), pointer(RegPair), byte(Val).
  30.  
  31. parse_tokens(change(Flag,Value)) --> verb(change), flag(Flag), flag_value(Value)
  32. .
  33.  
  34. parse_tokens(show(Reg)) -->  verb(show), register_name(Reg).
  35.  
  36. parse_tokens(show(Group)) --> verb(show), group_designation(Group).
  37.  
  38. parse_tokens(show(RegPair)) -->  verb(show), pointer(RegPair).
  39.  
  40. parse_tokens(show(Start,End)) -->   verb(show), address(Start), address(End),
  41.                                   { Start =< End }.
  42.  
  43. parse_tokens(show(Start)) -->   verb(show), address(Start).
  44.  
  45. parse_tokens(help(Topic)) -->   verb(help), verb(Topic).
  46.  
  47. parse_tokens(step(Times)) -->  verb(step), byte(Times).
  48.  
  49. parse_tokens(my_trace(Times)) --> verb(my_trace), byte(Times).
  50.  
  51. parse_tokens(Command) -->  verb(Command), { Command \== change }.
  52.  
  53. address(Adr) --> [Adr], { Adr >= 0, top_of_memory(TOM), Adr =< TOM }.
  54.  
  55. byte(Val) -->  [Val],  { Val >= 0, Val < 256 }.
  56.  
  57. flag_value(X) --> [X], { X == 1; X == 0 }.
  58.  
  59. register_name(a) --> [a].     register_name(b) --> [b].
  60. register_name(c) --> [c].     register_name(d) --> [d].
  61. register_name(e) --> [e].     register_name(h) --> [h].
  62. register_name(l) --> [l].     register_name(flags) --> [f];[fl];[flags].
  63.  
  64. flag(z)  --> [z].   flag(s)  --> [s].    flag(p) --> [p].
  65. flag(cy) --> [cy].  flag(ac) --> [ac].
  66.  
  67. group_designation(all) --> [al];[all].
  68. group_designation(regs) --> [r];[re];[regs].
  69. group_designation(stack) --> [st];[stack].
  70.  
  71. pointer(bc) --> [bc].         pointer(de) --> [de].
  72. pointer(pc) --> [p];[pc].     pointer(sp) --> [s];[sp].
  73. pointer(hl) --> [hl];[m];[me];[mem].
  74.  
  75. verb(change) --> [c];[ch];[change];[set].    % 'set' is a synonym
  76. verb(status) --> [state].                    % must say 'state'
  77. verb(help)   --> [h];[he];[help].
  78. verb(quit)   --> [q];[qu];[quit].
  79. verb(show)   --> [sh];[show].
  80. verb(step)   --> [st];[step].
  81. verb(my_trace) --> [t];[tr];[trace].
  82. verb(reset_processor) --> [r];[re];[reset].
  83.  
  84. % end PARSE80.ARI
  85.